package com.example.memento.model;

/**
 * 下载来源枚举
 * 用于标注词典资源的下载来源
 * 
 * @author memento
 */
public enum DownloadSource {
    
    /**
     * GitHub - GitHub 代码托管平台
     */
    GITHUB("GitHub", "GitHub 代码托管平台"),
    
    /**
     * Gitee - 码云（中国版的 GitHub）
     */
    GITEE("Gitee", "码云代码托管平台"),
    
    /**
     * 外网 - 外部公开网站
     */
    EXTERNAL_NETWORK("外网", "外部公开网站"),
    
    /**
     * 广域网 - 广域网资源
     */
    WAN("广域网", "广域网资源"),
    
    /**
     * 网盘 - 云存储网盘（百度网盘、阿里云盘等）
     */
    CLOUD_STORAGE("网盘", "云存储网盘资源"),
    
    /**
     * 本地 - 本地文件系统
     */
    LOCAL("本地", "本地文件系统"),
    
    /**
     * 内网 - 内网服务器
     */
    INTRANET("内网", "内网服务器资源"),
    
    /**
     * 其他 - 其他来源
     */
    OTHER("其他", "其他来源");

    private final String code;
    private final String description;

    DownloadSource(String code, String description) {
        this.code = code;
        this.description = description;
    }

    public String getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据代码获取枚举
     */
    public static DownloadSource fromCode(String code) {
        if (code == null || code.isEmpty()) {
            return OTHER;
        }
        for (DownloadSource source : values()) {
            if (source.code.equals(code)) {
                return source;
            }
        }
        return OTHER;
    }

    /**
     * 根据 URL 自动识别下载来源
     */
    public static DownloadSource detectFromUrl(String url) {
        if (url == null || url.isEmpty()) {
            return OTHER;
        }
        
        String lowerUrl = url.toLowerCase();
        
        if (lowerUrl.contains("github.com")) {
            return GITHUB;
        } else if (lowerUrl.contains("gitee.com")) {
            return GITEE;
        } else if (lowerUrl.contains("pan.baidu.com") || 
                   lowerUrl.contains("yunpan") ||
                   lowerUrl.contains("aliyundrive.com") ||
                   lowerUrl.contains("cloud.189.cn")) {
            return CLOUD_STORAGE;
        } else if (lowerUrl.startsWith("file://") || 
                   lowerUrl.startsWith("/") && !lowerUrl.startsWith("http")) {
            return LOCAL;
        } else if (lowerUrl.startsWith("http://192.168.") ||
                   lowerUrl.startsWith("http://10.") ||
                   lowerUrl.startsWith("http://172.")) {
            return INTRANET;
        } else if (lowerUrl.startsWith("http://") || lowerUrl.startsWith("https://")) {
            return EXTERNAL_NETWORK;
        }
        
        return OTHER;
    }
}

